package cn.doitedu.day06

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Date 22.4.4
 * @Created by HANGGE
 * @Description
 */
object C01_CollectionRDD_NumberPartition {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setMaster("local[*]")
      .set("spark.default.parallelism" , "3")
      .setAppName("帅无边的男人们")
    val sc = new SparkContext(conf)
    // 本地集合转换成RDD
    val ls = List(1, 2, 3, 4, 5, 6 ,7)
    val rdd = sc.makeRDD(ls)
    println(rdd.getNumPartitions)
    println(rdd.partitions.length)
    /**
     * 默认分区个数
     *   1)  local[*]   默认分区数是  16     本地模式 当前机器的所有的可用资源核数
     *   2)  local[N]   分区数        N      SparkContext 分配N个可用核
     *   3)  local      分区数        1
     *   4)  spark.default.parallelism = N    首先这个参数生效
     */


      //==========================================数据在每个分区中的分配
    /**
     * 1 2 3 4 5   2个分区
     * [1  2]   [3 4 5]
     * 1 2 3 4 5 6 7   3 个分区
     * [1 2]  [ 3  4]  [ 5 6 7]
     */
    val res = rdd.mapPartitionsWithIndex((p, iters) => {
      iters.map(e => e + "---: " + p)
    })
    res.foreach(println)


  }

}
